#ifndef __DEVICE_H__
#define __DEVICE_H__

#include"dlist.h"


 /**
  *  * @brief 设备的数据结构
  *   * 
  */    
typedef struct device 
{
	//自动维护的数据, 用户不对其进行设置和修改

		int dev_id;         		//设备号，如 10001;
		int dev_order;      		//设备序号
		int  dev_status;    		//设备工作状态: 如 0 OFF 1 ON
		float cur_value;    		//设备当前值

		//用户可以设置和修改的项目

		char dev_name[32];          //设备名，如kitchen_light1,room_airconditioning
		char dev_type[32]; 			//设备类型，如switch,led,airconditioner,
		char dev_ip[16];			//设备 IPv4 型如 IP192.168.31.111
		float power_ele;			//额定功率: 如 60W
									// ...其他功能待更新
}device_t;


//获取设备号号
int generate_id();	 
//加载设备函数
node_t * load_dev();
//保存设备函数
int save_dev(node_t * head);
//	添加设备函数
int add_dev(node_t * head, const device_t * newdev);
//查找设备函数(按设备号，按设备名，按设备类型)
node_t *find_dev(node_t * head, const device_t *data,cmpfun_t cmpfun);

int cmpDviceid(const void *data1,const void *data2);
int cmpDviceorder(const void *data1,const void *data2);
int cmpDvicestatus(const void *data1,const void *data2);
int cmpDvicename(const void *data1,const void *data2);
int cmpDvicetype(const void *data1,const void *data2);
int cmpDviceip(const void *data1,const void *data2);


//删除设备函数 (按设备号，按设备名字，按设备类型)

int del_dev(node_t * head,const device_t * dev, cmpfun_t cmpfun);



//修改设备
typedef int (*updatefun_t)(void *old_data,const void *newd_ata);
node_t *update_dev(node_t * head,int id,const device_t * updatedev,updatefun_t updatefun); 

int updatedev_all(void *old_data,const void *new_data);
int updatedev_name(void *old_data,const void *new_data);
int updatedev_ip(void *old_data,const void *new_data);
int updatedev_order(void *old_data,const void *new_data);
int updatedev_type(void *old_data,const void *new_data);
int updatedev_value(void *old_data,const void *new_data);
int updatedev_status(void *old_data,const void *new_data);
int updatedev_power(void *old_data,const void *new_data);

//设备排序
int sort_dev(node_t * head, cmpfun_t cmpfun);				

//显示设备函数
void show_dev(node_t * head, showfun_t showfun);			
void showdev_all(const void *devdata);

#endif


